﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SistemaGO_Library;
using SistemaGO_Library.Entidades.Categoria;

namespace SistemaGO_Desktop.Visao.Telas
{
    public partial class frmCategorias : Form
    {
        private static frmCategorias instancia = null;
        Categoria cat = new Categoria();
        private Fachada fachada = Fachada.getInstance();
                        
        private frmCategorias() {
            InitializeComponent();
            tbCadastrarNomeCategorias.Focus();
            tbCadastrarCodigoCategorias.Text = fachada.buscarCodigoCategoria().ToString();
        }

        public static frmCategorias getInstance() {
            if (instancia == null) {
                instancia = new frmCategorias();
            } else {
                instancia.Focus();
            }
            return instancia;
        }

        private void limparTela() {
            //Campos do cadastro
            tbCadastrarNomeCategorias.Text = "";
            tbCadastrarDescricaoCategorias.Text = "";
            //Campos da alteração
            tbAlterarCodigoCategorias.Text = "";
            tbAlterarNomeCategorias.Text = "";
            tbAlterarDescricaoCategorias.Text = "";
            //Campos da exclusão
            tbExcluirCodigoCategorias.Text = "";
            tbExcluirNomeCategorias.Text = "";
            tbExcluirDescricaoCategorias.Text = "";
        }

        private void btCadastrarCategorias_Click(object sender, EventArgs e) {
            if (!tbCadastrarNomeCategorias.Text.Trim().Equals(""))
            {
                cat.Categoria_nome = tbCadastrarNomeCategorias.Text;
                cat.Categoria_descricao = tbCadastrarDescricaoCategorias.Text;
                try {
                    fachada.inserirCategoria(cat);
                    MessageBox.Show("Categoria cadastrada com sucesso", "Cadastro Realizado", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limparTela();
                    tbCadastrarCodigoCategorias.Text = fachada.buscarCodigoCategoria().ToString();
                    tbCadastrarNomeCategorias.Focus();
                    
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            } else {
                MessageBox.Show("Campo nome obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                tbCadastrarNomeCategorias.Focus();
            }          
        }

        private void btLimparCategorias_Click(object sender, EventArgs e) {
            DialogResult resultado = MessageBox.Show("Você tem certeza que quer limpar a tela?", "Limpar Tela", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (resultado == System.Windows.Forms.DialogResult.Yes) {
                limparTela();
                tbCadastrarNomeCategorias.Focus();
            }
        }

        private void btAlterarBuscarCategorias_Click(object sender, EventArgs e) {
            Categoria categoria = new Categoria();
            try {
                categoria = fachada.buscarCategoria(int.Parse(tbAlterarBuscarCodigo.Text));
                tbAlterarCodigoCategorias.Text = categoria.Categoria_cod.ToString();
                tbAlterarNomeCategorias.Text = categoria.Categoria_nome;
                tbAlterarDescricaoCategorias.Text = categoria.Categoria_descricao;

                gbAlterarDadosDaCategorias.Visible = true;
            } catch (Exception ex) {
                MessageBox.Show(ex.Message, "Falha na Busca", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limparTela();
                gbAlterarDadosDaCategorias.Visible = false;
                tbAlterarBuscarCodigo.Focus();
            }
        }

        private void btAlterarCategorias_Click(object sender, EventArgs e) {
            if (!tbAlterarNomeCategorias.Text.Trim().Equals("")) {
                Categoria novaCategoria = new Categoria();
                novaCategoria.Categoria_cod = int.Parse(tbAlterarCodigoCategorias.Text);
                novaCategoria.Categoria_nome = tbAlterarNomeCategorias.Text;
                novaCategoria.Categoria_descricao = tbAlterarDescricaoCategorias.Text;
                try {
                    fachada.alterarCategoria(int.Parse(tbAlterarCodigoCategorias.Text), novaCategoria);
                    MessageBox.Show("Categoria alterada com sucesso", "Alteração Realizada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    gbAlterarDadosDaCategorias.Visible = false;
                    limparTela();
                    tbAlterarBuscarCodigo.Focus();
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    tbAlterarBuscarCodigo.Focus();
                }
            } else {
                MessageBox.Show("Campo nome obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                tbAlterarNomeCategorias.Focus();
            }
        }

        private void btExcluirBuscarCategorias_Click(object sender, EventArgs e) {
            Categoria categoria = new Categoria();
            try {
                categoria = fachada.buscarCategoria(int.Parse(tbExcluirBuscarCodigo.Text));
                tbExcluirCodigoCategorias.Text = categoria.Categoria_cod.ToString();
                tbExcluirNomeCategorias.Text = categoria.Categoria_nome;
                tbExcluirDescricaoCategorias.Text = categoria.Categoria_descricao;
            } catch (Exception ex) {
                MessageBox.Show(ex.Message, "Falha na Busca", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limparTela();
                tbExcluirBuscarCodigo.Focus();
            }
        }

        private void btExcluirCategorias_Click(object sender, EventArgs e) {
            DialogResult resultado = MessageBox.Show("Você tem certeza que quer excluir essa categoria?", "Deletar Categoria!", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (resultado == System.Windows.Forms.DialogResult.Yes) {
                try {
                    fachada.excluirCategoria(int.Parse(tbExcluirCodigoCategorias.Text));
                    MessageBox.Show("Categoria excluida com sucesso", "Exclusão Realizada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    limparTela();
                    tbExcluirBuscarCodigo.Focus();
                } catch (Exception ex) {
                    MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    tbExcluirBuscarCodigo.Focus();
                }
            }
        }

        private void frmCategorias_FormClosing(object sender, FormClosingEventArgs e) {
            instancia = null;
        }
    }
}
